#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>


#define BUF_SIZE 30
void error_handling( char * msg );

int main( int argc, char *argv[])
{
    int str_len;
    int recv_sock;
    struct sockaddr_in adr;

    char buf[BUF_SIZE];
    if ( 2 != argc ) {
        printf("Usage: %s  <PORT> \n", argv[0]);
        exit( 1 );
    }

    recv_sock = socket( PF_INET, SOCK_DGRAM, 0);
    memset( &adr, 0, sizeof(adr));
    adr.sin_family= AF_INET;
    adr.sin_addr.s_addr = htonl( INADDR_ANY );
    adr.sin_port = htons( atoi(argv[1]) );

    if (-1 == bind( recv_sock, (struct sockaddr *) &adr, sizeof(adr))) {
        error_handling(" bind() error");
    }
 
    while (1)
    {
        str_len = recvfrom( recv_sock, buf, BUF_SIZE - 1, 0, NULL, 0 );
        if ( str_len < 0)
            break;
        buf[ str_len ] = 0;
        fputs( buf, stdout);
    }

    close( recv_sock );


    return 0;
}

void error_handling( char * msg )
{
    fputs( msg, stderr );
    fputc( '\n', stderr );
    exit( 1 );
}